﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GibbsLDASharp.LDA
{
    public class LDACmdOption : ICommandOption
    {
        [OptionAttribute(Cmd: "-est", TypeName: "bool", Description: "Specify whether we want to estimate model from scratch")]
        public bool est = false;

        [OptionAttribute(Cmd: "-estc", TypeName: "bool", Description: "Continue to estimate the model from a previously estimated model.")]
        public bool estc = false;

        [OptionAttribute(Cmd: "-inf", TypeName: "bool", Description: "Specify whether we want to estimate model from scratch")]
        public bool inf = false;

        [OptionAttribute(Cmd: "-alpha", TypeName: "double", Description: "The value of alpha, hyper-parameter of LDA. The default value of alpha is 50 / K (K is the the number of topics). See [Griffiths04] for a detailed discussion of choosing alpha and beta values.")]
        public double alpha = 5;

        [OptionAttribute(Cmd: "-beta", TypeName: "double", Description: "The value of beta, also the hyper-parameter of LDA. Its default value is 0.1")]
        public double beta = 0.1;
        
        [OptionAttribute(Cmd: "-dir", TypeName: "string", Description: "The directory contain the previously estimated model")]
        public string dir = "";

        [OptionAttribute(Cmd: "-dfile", TypeName: "string", Description: "The input training data file.")]
        public string dfile = "";

        [OptionAttribute(Cmd: "-modelName", TypeName: "string", Description: "The name of the previously estimated model.")]
        public string modelName = "";

        [OptionAttribute(Cmd: "-ntopics", TypeName: "int", Description: "The number of topics. Its default value is 100. This depends on the input dataset.")]
        public int K = 10;

        [OptionAttribute(Cmd: "-niters", TypeName: "int", Description: "The number of Gibbs sampling iterations to continue estimating. The default value is 2000.")]
        public int niters = 100;

        [OptionAttribute(Cmd: "-twords", TypeName: "int", Description: "The number of most likely words for each topic. The default value is zero. If you set this parameter a value larger than zero, e.g., 20, GibbsLDA++ will print out the list of top 20 most likely words per each topic each time it save the model to hard disk according to the parameter savestep above.")]
        public int twords = 10;

        [OptionAttribute(Cmd: "-wordMapFileName", TypeName: "string", Description: "Wordmap filename")]
        public string wordMapFileName = "wordmap.txt";

        [OptionAttribute(Cmd: "-savestep", TypeName: "int", Description: "The step (counted by the number of Gibbs sampling iterations) at which the LDA model is saved to hard disk. The default value is 200.")]
        public int savestep = 10;


    }
}
